Skip to content

Snowflake red-team iter-8 — surface analytical depth in the deliverable, close detection-rule structural gaps#51

Merged
AndrewAltimit merged 1 commit into
mainfrom
snowflake-audit-fixes-iter-8
May 16, 2026
Merged

Snowflake red-team iter-8 — surface analytical depth in the deliverable, close detection-rule structural gaps#51
AndrewAltimit merged 1 commit into
mainfrom
snowflake-audit-fixes-iter-8

Conversation

@AndrewAltimit
Copy link
Copy Markdown
Owner

Summary

Iter-7 self-audit found that the analytical depth (docs/analysis/, detection/snowflake/) consistently outran what reached the client-facing HTML report, and that three Sigma rules carried structural matching defects (over-firing or never-firing). This iteration closes both gaps end-to-end across 13 prioritized audit items.

Deliverable layer (reports/snowflake-platform-assessment/)

  • New healthcare-overlay.html — HIPAA control mapping, MFA-boundary clarity (human vs. service), per-chain PHI impact map, OCR retention, engagement runbook. Surfaces the analytical companion at docs/analysis/snowflake-healthcare-overlay-2026.md.
  • New incident-response.html — detect to contain to remediate to validate per chain (A, B, C, D, F, G, I, J), with real Snowflake containment SQL (ALTER USER … SET DISABLED, ALTER SHARE … REMOVE ACCOUNTS, RSA_PUBLIC_KEY clearing, PAT revocation), forensic-capture templates.
  • attack-chains.html — new "Residual-risk profile" table (Default residual vs. Post-P0 residual per chain).
  • detection.html — new chain x maturity-tier coverage matrix; rule counts corrected (34 total: 4 production_ready, 20 requires_enrichment, 4 requires_correlation, 5 requires_cortex_sidecar, 1 requires_endpoint_telemetry).
  • cve-inventory.html — every high/medium CVE row now carries Affected / Trigger / Artifact / Detection applicability fields lifted from the per-CVE matrix doc.
  • recommendations.html — new 30/60/90/180-day remediation timeline with effort estimates and "why this window" rationale.
  • Per-page TOC + anchor IDs on all nine HTML pages (new .page-toc CSS rule, two-column layout).

Detection-rule fixes

  • New bulk_exfil_baseline_trail.yml — Chain A's missing Trail pair (the README's "every chain has both ACCOUNT_USAGE and Trail rules" claim was previously overstated for Chain A).
  • native_app_privilege_bump.yml, native_app_privilege_bump_trail.yml, native_app_unexpected_version_bump.yml — switched |contains to |startswith to bind to the structural-token contract emitted by application_history projections (PRIVILEGE:<name>, EXTERNAL ACCESS INTEGRATION:<name>, etc.). Mock at infra/lab/mock-snowflake/app.py:1019 confirms the structured-token shape.
  • udf_with_eai_invocation.yml — switched to explicit udf_has_eai: true boolean. Previous udf_eai_list|exists: true would pass on an empty list and fire on UDFs that declare no EAIs.
  • ENRICHMENT.md section 3 — per-SIEM watermark-computation recipes (Sentinel KQL, Splunk SPL, Elastic) + fallback modes + synthetic-event validation step. Closes the silent-never-fire risk on federated_login_anomaly.yml.

Cross-references

  • chain-reference-table.md carries the new Trail rule UUID and the residual-risk profile table.
  • detection/snowflake/README.md rule-count tier table reflects the new total (34 / 20).
  • All nine report pages share an identical nav block; CI check_snowflake_report_integrity.py passes.

Test plan

  • python3 ci/check_snowflake_report_integrity.py — passes (9 pages, nav parity + internal links)
  • python3 ci/check_snowflake_tools_syntax.py — passes (24 modules)
  • All edited YAML rule files parse as valid YAML
  • Open each of the 9 report pages locally (python3 -m http.server 8080 from reports/snowflake-platform-assessment/) and verify: nav highlights the active page, TOC anchors scroll to the right section, all internal links resolve
  • Spot-check the new healthcare-overlay.html and incident-response.html for visual consistency with the existing report style
  • Re-read the chain-reference table's residual-risk column for any chain where the rationale doesn't match the recommendations page's P0 control

Generated with Claude Code

…le, close detection-rule structural gaps

Iter-7 audit found that the analytical layer (docs/analysis, detection/snowflake) consistently outran the
HTML deliverable a client actually reads, and that three Sigma rules carried structural matching defects
that would either over-fire or never fire. This iteration closes both gaps end-to-end.

Deliverable layer (reports/snowflake-platform-assessment/):
- New healthcare-overlay.html surfacing HIPAA control mapping, MFA-boundary clarity, per-chain PHI impact,
  OCR retention, and engagement-runbook items. The analytical companion existed in docs/analysis/ but was
  invisible to readers landing on the HTML report.
- New incident-response.html with detect→contain→remediate→validate per chain (A, B, C, D, F, G, I, J),
  real Snowflake containment SQL (ALTER USER … SET DISABLED, ALTER SHARE … REMOVE ACCOUNTS, RSA_PUBLIC_KEY
  clearing, PAT revocation), forensic-capture templates, and cross-cutting hygiene rules.
- Residual-risk profile table on attack-chains.html (Default residual vs. Post-P0 residual per chain),
  naming the structural surface that remains after each chain's P0 fix is applied.
- Detection-coverage matrix (chain × maturity tier) on detection.html, with rule counts corrected to 34
  total / 4 production_ready / 20 requires_enrichment / 4 requires_correlation / 5 requires_cortex_sidecar
  / 1 requires_endpoint_telemetry.
- CVE-inventory page: every high/medium-severity row now carries Affected / Trigger / Artifact / Detection
  applicability fields lifted from the per-CVE matrix doc; previously the page was a CVE list without the
  operational columns.
- Remediation timeline (30/60/90/180-day phasing) on recommendations.html with effort estimates and a
  "why this window" column.
- Per-page TOC + anchor IDs on all nine HTML pages. New .page-toc CSS rule uses the two-column layout.

Detection-rule fixes (the structural defects iter-7 named):
- New bulk_exfil_baseline_trail.yml (Chain A Trail-side pair) — the detection README claimed every chain
  had both ACCOUNT_USAGE and Trail rules; Chain A's Trail variant was previously the streaming-ingest
  sidecar, not a rule. Now a proper rule consuming query.snowflake.completed with the same four-signal
  contract as the ACCOUNT_USAGE rule.
- native_app_privilege_bump.yml, native_app_privilege_bump_trail.yml, native_app_unexpected_version_bump.yml
  switched from `|contains: 'PRIVILEGE:'` (substring match, FP risk) to `|startswith: 'PRIVILEGE:'` (binds
  to the structural-token contract emitted by the application_history projection).
- udf_with_eai_invocation.yml now keys on an explicit `udf_has_eai: true` boolean rather than
  `udf_eai_list|exists: true` — the latter would pass on an empty list `[]` and fire on UDFs that declare
  no EAIs.
- ENRICHMENT.md §3 expanded with per-SIEM watermark-computation recipes (Sentinel KQL, Splunk SPL,
  Elastic), fallback modes, and a synthetic-event validation step. Previously the watermark fields were
  named but uncomputed; federated_login_anomaly.yml would silently never fire in a SIEM without the
  watermark pipeline.

Cross-references kept consistent:
- chain-reference-table.md updated with Chain A's new Trail rule UUID and the residual-risk profile
  table.
- detection/snowflake/README.md rule-count tier table reflects the new rule (34 total, 20 requires_enrichment).
- All nine report pages share the identical nav block; CI report-integrity check passes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@AndrewAltimit AndrewAltimit merged commit 88abd91 into main May 16, 2026
2 checks passed
@AndrewAltimit AndrewAltimit deleted the snowflake-audit-fixes-iter-8 branch May 16, 2026 03:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant